package thread;

import sun.java2d.pipe.SpanIterator;

/**
 * 多线程
 * Thread 线程 线程是指一个程序单一顺序执行流程
 * 多线程:多个单一的顺序执行流程"同时"执行
 * <p>
 * 多线程的执行实际上是并发的,CPU在这些线程(流程)之间快速切换执行,由于速度快造就是一种
 * 感官上的同时运行效果,因此实际上微观上是走走停停,宏观上是一起动的效果
 * <p>
 * <p>
 * 第一种创建线程的方式:
 * 1:定义一个类并继承Thread,用来定义一个执行流程
 * 2:重写run方法,用来定义这个流程中需要运行的所有代码
 * 3:调用线程的start方法将这个流程跑起来,那么这个流程就会和其他流程并发运行
 */
public class ThreadDemo1 {
    public static void main(String[] args) {
        //实例化两个线程(两个流程)
        Thread t1=new MyThread1();
        Thread t2=new MyThread2();
        //将两个线程跑起来,启动要调用start方法而不是run方法!!!切记
        t1.start();
        t2.start();
    }

}

/**
 * 继承Thread并重写run方法的优点在于结构简单,匿名内部类方式创件推荐这种方法
 * 缺点主要有两个:
 * 1:由于java时单继承的,这会导致如果继承了Thread就无法在继承其他类去复用方法了
 * 实际开发中很不方便
 * 2:直接重写run方法再线程中导致线程与线程实际执行的任务绑定在一起,不利于线程的重写
 */
class MyThread1 extends Thread {
    public void run() {
        for (int i = 0; i < 1000; i++) {
            System.out.println("hello!姐");
        }
    }

}

class MyThread2 extends Thread {
    public void run() {
        for (int i = 0; i < 1000; i++) {
            System.out.println("来了老弟");
        }
    }
}